// an order 3 decoder
// For a 32 speaker array

desc: Wig_3o_MS216 WigWare Ambi Order 3, 3H1V 32 Speaker Decoder

//include Ambisonic Filter Functions
import WigAmbFilter.jsfx-inc

//include decoder filenames
filename:0,Wig_3o_MS216_pic_1.png
filename:1,Wig_3o_MS216_pic_2.png
filename:2,Wig_3o_MS216_pic_3.png
filename:3,UoD_Logo_Small.png

slider1:0<0,2,1{Strict,Cardioid,Energy}>LF Decode Type
slider2:2<0,2,1{Strict,Cardioid,Energy}>HF Decode Type
slider3:1200<100,3000,20>Transistion Frequency (Hz)
slider4:LFGain=0.0<-6.0,6.0,0.05>LF Decoder Gain (dB)
slider5:HFGain=3.4764<-6.0,6.0,0.05>HF Decoder Gain (dB)
slider6:DistFiltEnable=0<1,2,1{Off,Speaker Distance Comp (SDC),SDC & NFC}>Distance Filtering
slider7:SpDist=4<0.5,4,0.05>Speaker Distance
slider8:NFCDist=4<0.5,4,0.05>Near-Field Comp Distance

in_pin:0_AmbiX
in_pin:1_AmbiX
in_pin:2_AmbiX
in_pin:3_AmbiX
in_pin:4_AmbiX
in_pin:5_AmbiX
in_pin:6_AmbiX
in_pin:7_AmbiX
in_pin:8_AmbiX
in_pin:9_AmbiX
in_pin:10_AmbiX
in_pin:11_AmbiX
in_pin:12_AmbiX
in_pin:13_AmbiX
in_pin:14_AmbiX
in_pin:15_AmbiX
out_pin:0 az 0 el
out_pin:22.5 az 0 el
out_pin:45 az 0 el
out_pin:67.5 az 0 el
out_pin:90 az 0 el
out_pin:112.5 az 0 el
out_pin:135 az 0 el
out_pin:157.5 az 0 el
out_pin:180 az 0 el
out_pin:202.5 az 0 el
out_pin:225 az 0 el
out_pin:247.5 az 0 el
out_pin:270 az 0 el
out_pin:292.5 az 0 el
out_pin:315 az 0 el
out_pin:337.5 az 0 el
out_pin:22.5 az 35.4 el
out_pin:67.5 az 35.4 el
out_pin:112.5 az 35.4 el
out_pin:157.5 az 35.4 el
out_pin:202.5 az 35.4 el
out_pin:247.5 az 35.4 el
out_pin:292.5 az 35.4 el
out_pin:337.5 az 35.4 el
out_pin:22.5 az -35.4 el
out_pin:67.5 az -35.4 el
out_pin:112.5 az -35.4 el
out_pin:157.5 az -35.4 el
out_pin:202.5 az -35.4 el
out_pin:247.5 az -35.4 el
out_pin:292.5 az -35.4 el
out_pin:337.5 az -35.4 el
@init
bpos=0;
csp1 = 1024;
length_of_csps = 16;
end_of_csps = csp1 + length_of_csps;
csp2 = end_of_csps;
end_of_csps = csp2 + length_of_csps;
csp3 = end_of_csps;
end_of_csps = csp3 + length_of_csps;
csp4 = end_of_csps;
end_of_csps = csp4 + length_of_csps;
csp5 = end_of_csps;
end_of_csps = csp5 + length_of_csps;
csp6 = end_of_csps;
end_of_csps = csp6 + length_of_csps;
csp7 = end_of_csps;
end_of_csps = csp7 + length_of_csps;
csp8 = end_of_csps;
end_of_csps = csp8 + length_of_csps;
csp9 = end_of_csps;
end_of_csps = csp9 + length_of_csps;
csp10 = end_of_csps;
end_of_csps = csp10 + length_of_csps;
csp11 = end_of_csps;
end_of_csps = csp11 + length_of_csps;
csp12 = end_of_csps;
end_of_csps = csp12 + length_of_csps;
csp13 = end_of_csps;
end_of_csps = csp13 + length_of_csps;
csp14 = end_of_csps;
end_of_csps = csp14 + length_of_csps;
csp15 = end_of_csps;
end_of_csps = csp15 + length_of_csps;
csp16 = end_of_csps;
end_of_csps = csp16 + length_of_csps;
csp17 = end_of_csps;
end_of_csps = csp17 + length_of_csps;
csp18 = end_of_csps;
end_of_csps = csp18 + length_of_csps;
csp19 = end_of_csps;
end_of_csps = csp19 + length_of_csps;
csp20 = end_of_csps;
end_of_csps = csp20 + length_of_csps;
csp21 = end_of_csps;
end_of_csps = csp21 + length_of_csps;
csp22 = end_of_csps;
end_of_csps = csp22 + length_of_csps;
csp23 = end_of_csps;
end_of_csps = csp23 + length_of_csps;
csp24 = end_of_csps;
end_of_csps = csp24 + length_of_csps;
csp25 = end_of_csps;
end_of_csps = csp25 + length_of_csps;
csp26 = end_of_csps;
end_of_csps = csp26 + length_of_csps;
csp27 = end_of_csps;
end_of_csps = csp27 + length_of_csps;
csp28 = end_of_csps;
end_of_csps = csp28 + length_of_csps;
csp29 = end_of_csps;
end_of_csps = csp29 + length_of_csps;
csp30 = end_of_csps;
end_of_csps = csp30 + length_of_csps;
csp31 = end_of_csps;
end_of_csps = csp31 + length_of_csps;
csp32 = end_of_csps;
end_of_csps = csp32 + length_of_csps;
csp1[0] = 0.0312500000;csp1[1] = -0.0000000000;csp1[2] = -0.0000000000;csp1[3] = 0.0751006353;csp1[4] = 0.0000000000;csp1[5] = -0.0000000000;csp1[6] = 0.0000000000;csp1[7] = 0.0000000000;csp1[8] = 0.1001320894;csp1[9] = -0.0000000000;csp1[10] = -0.0000000000;csp1[11] = -0.0000000000;csp1[12] = 0.0000000000;csp1[13] = 0.0000000000;csp1[14] = 0.0000000000;csp1[15] = 0.1222534621;
csp2[0] = 0.0312500000;csp2[1] = 0.0287397689;csp2[2] = -0.0000000000;csp2[3] = 0.0693839398;csp2[4] = 0.0708040795;csp2[5] = 0.0000000000;csp2[6] = 0.0000000000;csp2[7] = 0.0000000000;csp2[8] = 0.0708040795;csp2[9] = 0.1129474714;csp2[10] = -0.0000000000;csp2[11] = -0.0000000000;csp2[12] = 0.0000000000;csp2[13] = 0.0000000000;csp2[14] = -0.0000000000;csp2[15] = 0.0467843745;
csp3[0] = 0.0312500000;csp3[1] = 0.0531041685;csp3[2] = -0.0000000000;csp3[3] = 0.0531041685;csp3[4] = 0.1001320894;csp3[5] = 0.0000000000;csp3[6] = 0.0000000000;csp3[7] = 0.0000000000;csp3[8] = 0.0000000000;csp3[9] = 0.0864462520;csp3[10] = -0.0000000000;csp3[11] = 0.0000000000;csp3[12] = 0.0000000000;csp3[13] = 0.0000000000;csp3[14] = 0.0000000000;csp3[15] = -0.0864462520;
csp4[0] = 0.0312500000;csp4[1] = 0.0693839398;csp4[2] = 0.0000000000;csp4[3] = 0.0287397689;csp4[4] = 0.0708040795;csp4[5] = -0.0000000000;csp4[6] = -0.0000000000;csp4[7] = -0.0000000000;csp4[8] = -0.0708040795;csp4[9] = -0.0467843745;csp4[10] = -0.0000000000;csp4[11] = 0.0000000000;csp4[12] = 0.0000000000;csp4[13] = 0.0000000000;csp4[14] = 0.0000000000;csp4[15] = -0.1129474714;
csp5[0] = 0.0312500000;csp5[1] = 0.0751006353;csp5[2] = 0.0000000000;csp5[3] = 0.0000000000;csp5[4] = 0.0000000000;csp5[5] = -0.0000000000;csp5[6] = -0.0000000000;csp5[7] = -0.0000000000;csp5[8] = -0.1001320894;csp5[9] = -0.1222534621;csp5[10] = 0.0000000000;csp5[11] = 0.0000000000;csp5[12] = 0.0000000000;csp5[13] = 0.0000000000;csp5[14] = -0.0000000000;csp5[15] = -0.0000000000;
csp6[0] = 0.0312500000;csp6[1] = 0.0693839398;csp6[2] = -0.0000000000;csp6[3] = -0.0287397689;csp6[4] = -0.0708040795;csp6[5] = 0.0000000000;csp6[6] = -0.0000000000;csp6[7] = -0.0000000000;csp6[8] = -0.0708040795;csp6[9] = -0.0467843745;csp6[10] = 0.0000000000;csp6[11] = 0.0000000000;csp6[12] = 0.0000000000;csp6[13] = 0.0000000000;csp6[14] = -0.0000000000;csp6[15] = 0.1129474714;
csp7[0] = 0.0312500000;csp7[1] = 0.0531041685;csp7[2] = -0.0000000000;csp7[3] = -0.0531041685;csp7[4] = -0.1001320894;csp7[5] = 0.0000000000;csp7[6] = 0.0000000000;csp7[7] = -0.0000000000;csp7[8] = -0.0000000000;csp7[9] = 0.0864462520;csp7[10] = -0.0000000000;csp7[11] = 0.0000000000;csp7[12] = 0.0000000000;csp7[13] = 0.0000000000;csp7[14] = 0.0000000000;csp7[15] = 0.0864462520;
csp8[0] = 0.0312500000;csp8[1] = 0.0287397689;csp8[2] = -0.0000000000;csp8[3] = -0.0693839398;csp8[4] = -0.0708040795;csp8[5] = 0.0000000000;csp8[6] = 0.0000000000;csp8[7] = 0.0000000000;csp8[8] = 0.0708040795;csp8[9] = 0.1129474714;csp8[10] = 0.0000000000;csp8[11] = 0.0000000000;csp8[12] = 0.0000000000;csp8[13] = 0.0000000000;csp8[14] = -0.0000000000;csp8[15] = -0.0467843745;
csp9[0] = 0.0312500000;csp9[1] = 0.0000000000;csp9[2] = -0.0000000000;csp9[3] = -0.0751006353;csp9[4] = 0.0000000000;csp9[5] = -0.0000000000;csp9[6] = -0.0000000000;csp9[7] = -0.0000000000;csp9[8] = 0.1001320894;csp9[9] = 0.0000000000;csp9[10] = -0.0000000000;csp9[11] = 0.0000000000;csp9[12] = 0.0000000000;csp9[13] = 0.0000000000;csp9[14] = 0.0000000000;csp9[15] = -0.1222534621;
csp10[0] = 0.0312500000;csp10[1] = -0.0287397689;csp10[2] = -0.0000000000;csp10[3] = -0.0693839398;csp10[4] = 0.0708040795;csp10[5] = -0.0000000000;csp10[6] = -0.0000000000;csp10[7] = 0.0000000000;csp10[8] = 0.0708040795;csp10[9] = -0.1129474714;csp10[10] = -0.0000000000;csp10[11] = -0.0000000000;csp10[12] = 0.0000000000;csp10[13] = 0.0000000000;csp10[14] = -0.0000000000;csp10[15] = -0.0467843745;
csp11[0] = 0.0312500000;csp11[1] = -0.0531041685;csp11[2] = 0.0000000000;csp11[3] = -0.0531041685;csp11[4] = 0.1001320894;csp11[5] = -0.0000000000;csp11[6] = -0.0000000000;csp11[7] = 0.0000000000;csp11[8] = 0.0000000000;csp11[9] = -0.0864462520;csp11[10] = -0.0000000000;csp11[11] = -0.0000000000;csp11[12] = 0.0000000000;csp11[13] = 0.0000000000;csp11[14] = 0.0000000000;csp11[15] = 0.0864462520;
csp12[0] = 0.0312500000;csp12[1] = -0.0693839398;csp12[2] = 0.0000000000;csp12[3] = -0.0287397689;csp12[4] = 0.0708040795;csp12[5] = -0.0000000000;csp12[6] = 0.0000000000;csp12[7] = -0.0000000000;csp12[8] = -0.0708040795;csp12[9] = 0.0467843745;csp12[10] = 0.0000000000;csp12[11] = 0.0000000000;csp12[12] = 0.0000000000;csp12[13] = 0.0000000000;csp12[14] = -0.0000000000;csp12[15] = 0.1129474714;
csp13[0] = 0.0312500000;csp13[1] = -0.0751006353;csp13[2] = 0.0000000000;csp13[3] = -0.0000000000;csp13[4] = -0.0000000000;csp13[5] = 0.0000000000;csp13[6] = 0.0000000000;csp13[7] = 0.0000000000;csp13[8] = -0.1001320894;csp13[9] = 0.1222534621;csp13[10] = 0.0000000000;csp13[11] = 0.0000000000;csp13[12] = 0.0000000000;csp13[13] = 0.0000000000;csp13[14] = -0.0000000000;csp13[15] = 0.0000000000;
csp14[0] = 0.0312500000;csp14[1] = -0.0693839398;csp14[2] = 0.0000000000;csp14[3] = 0.0287397689;csp14[4] = -0.0708040795;csp14[5] = 0.0000000000;csp14[6] = 0.0000000000;csp14[7] = 0.0000000000;csp14[8] = -0.0708040795;csp14[9] = 0.0467843745;csp14[10] = 0.0000000000;csp14[11] = 0.0000000000;csp14[12] = 0.0000000000;csp14[13] = 0.0000000000;csp14[14] = -0.0000000000;csp14[15] = -0.1129474714;
csp15[0] = 0.0312500000;csp15[1] = -0.0531041685;csp15[2] = 0.0000000000;csp15[3] = 0.0531041685;csp15[4] = -0.1001320894;csp15[5] = -0.0000000000;csp15[6] = -0.0000000000;csp15[7] = -0.0000000000;csp15[8] = -0.0000000000;csp15[9] = -0.0864462520;csp15[10] = 0.0000000000;csp15[11] = 0.0000000000;csp15[12] = 0.0000000000;csp15[13] = 0.0000000000;csp15[14] = -0.0000000000;csp15[15] = -0.0864462520;
csp16[0] = 0.0312500000;csp16[1] = -0.0287397689;csp16[2] = 0.0000000000;csp16[3] = 0.0693839398;csp16[4] = -0.0708040795;csp16[5] = -0.0000000000;csp16[6] = -0.0000000000;csp16[7] = -0.0000000000;csp16[8] = 0.0708040795;csp16[9] = -0.1129474714;csp16[10] = -0.0000000000;csp16[11] = -0.0000000000;csp16[12] = 0.0000000000;csp16[13] = 0.0000000000;csp16[14] = 0.0000000000;csp16[15] = 0.0467843745;
csp17[0] = 0.0312500000;csp17[1] = 0.0234265845;csp17[2] = 0.1078923379;csp17[3] = 0.0565567779;csp17[4] = 0.0470445898;csp17[5] = 0.0584889642;csp17[6] = 0.0000000000;csp17[7] = 0.1412048505;csp17[8] = 0.0470445898;csp17[9] = 0.0611721325;csp17[10] = 0.1185874041;csp17[11] = -0.0000000000;csp17[12] = 0.0000000000;csp17[13] = 0.0000000000;csp17[14] = 0.1185874041;csp17[15] = 0.0253383269;
csp18[0] = 0.0312500000;csp18[1] = 0.0565567779;csp18[2] = 0.1078923379;csp18[3] = 0.0234265845;csp18[4] = 0.0470445898;csp18[5] = 0.1412048505;csp18[6] = -0.0000000000;csp18[7] = 0.0584889642;csp18[8] = -0.0470445898;csp18[9] = -0.0253383269;csp18[10] = 0.1185874041;csp18[11] = -0.0000000000;csp18[12] = 0.0000000000;csp18[13] = 0.0000000000;csp18[14] = -0.1185874041;csp18[15] = -0.0611721325;
csp19[0] = 0.0312500000;csp19[1] = 0.0565567779;csp19[2] = 0.1078923379;csp19[3] = -0.0234265845;csp19[4] = -0.0470445898;csp19[5] = 0.1412048505;csp19[6] = -0.0000000000;csp19[7] = -0.0584889642;csp19[8] = -0.0470445898;csp19[9] = -0.0253383269;csp19[10] = -0.1185874041;csp19[11] = 0.0000000000;csp19[12] = 0.0000000000;csp19[13] = 0.0000000000;csp19[14] = -0.1185874041;csp19[15] = 0.0611721325;
csp20[0] = 0.0312500000;csp20[1] = 0.0234265845;csp20[2] = 0.1078923379;csp20[3] = -0.0565567779;csp20[4] = -0.0470445898;csp20[5] = 0.0584889642;csp20[6] = 0.0000000000;csp20[7] = -0.1412048505;csp20[8] = 0.0470445898;csp20[9] = 0.0611721325;csp20[10] = -0.1185874041;csp20[11] = 0.0000000000;csp20[12] = 0.0000000000;csp20[13] = 0.0000000000;csp20[14] = 0.1185874041;csp20[15] = -0.0253383269;
csp21[0] = 0.0312500000;csp21[1] = -0.0234265845;csp21[2] = 0.1078923379;csp21[3] = -0.0565567779;csp21[4] = 0.0470445898;csp21[5] = -0.0584889642;csp21[6] = 0.0000000000;csp21[7] = -0.1412048505;csp21[8] = 0.0470445898;csp21[9] = -0.0611721325;csp21[10] = 0.1185874041;csp21[11] = 0.0000000000;csp21[12] = 0.0000000000;csp21[13] = 0.0000000000;csp21[14] = 0.1185874041;csp21[15] = -0.0253383269;
csp22[0] = 0.0312500000;csp22[1] = -0.0565567779;csp22[2] = 0.1078923379;csp22[3] = -0.0234265845;csp22[4] = 0.0470445898;csp22[5] = -0.1412048505;csp22[6] = -0.0000000000;csp22[7] = -0.0584889642;csp22[8] = -0.0470445898;csp22[9] = 0.0253383269;csp22[10] = 0.1185874041;csp22[11] = 0.0000000000;csp22[12] = 0.0000000000;csp22[13] = 0.0000000000;csp22[14] = -0.1185874041;csp22[15] = 0.0611721325;
csp23[0] = 0.0312500000;csp23[1] = -0.0565567779;csp23[2] = 0.1078923379;csp23[3] = 0.0234265845;csp23[4] = -0.0470445898;csp23[5] = -0.1412048505;csp23[6] = 0.0000000000;csp23[7] = 0.0584889642;csp23[8] = -0.0470445898;csp23[9] = 0.0253383269;csp23[10] = -0.1185874041;csp23[11] = -0.0000000000;csp23[12] = 0.0000000000;csp23[13] = 0.0000000000;csp23[14] = -0.1185874041;csp23[15] = -0.0611721325;
csp24[0] = 0.0312500000;csp24[1] = -0.0234265845;csp24[2] = 0.1078923379;csp24[3] = 0.0565567779;csp24[4] = -0.0470445898;csp24[5] = -0.0584889642;csp24[6] = 0.0000000000;csp24[7] = 0.1412048505;csp24[8] = 0.0470445898;csp24[9] = -0.0611721325;csp24[10] = -0.1185874041;csp24[11] = -0.0000000000;csp24[12] = 0.0000000000;csp24[13] = 0.0000000000;csp24[14] = 0.1185874041;csp24[15] = 0.0253383269;
csp25[0] = 0.0312500000;csp25[1] = 0.0234265845;csp25[2] = -0.1078923379;csp25[3] = 0.0565567779;csp25[4] = 0.0470445898;csp25[5] = -0.0584889642;csp25[6] = -0.0000000000;csp25[7] = -0.1412048505;csp25[8] = 0.0470445898;csp25[9] = 0.0611721325;csp25[10] = -0.1185874041;csp25[11] = 0.0000000000;csp25[12] = 0.0000000000;csp25[13] = 0.0000000000;csp25[14] = -0.1185874041;csp25[15] = 0.0253383269;
csp26[0] = 0.0312500000;csp26[1] = 0.0565567779;csp26[2] = -0.1078923379;csp26[3] = 0.0234265845;csp26[4] = 0.0470445898;csp26[5] = -0.1412048505;csp26[6] = -0.0000000000;csp26[7] = -0.0584889642;csp26[8] = -0.0470445898;csp26[9] = -0.0253383269;csp26[10] = -0.1185874041;csp26[11] = 0.0000000000;csp26[12] = 0.0000000000;csp26[13] = 0.0000000000;csp26[14] = 0.1185874041;csp26[15] = -0.0611721325;
csp27[0] = 0.0312500000;csp27[1] = 0.0565567779;csp27[2] = -0.1078923379;csp27[3] = -0.0234265845;csp27[4] = -0.0470445898;csp27[5] = -0.1412048505;csp27[6] = 0.0000000000;csp27[7] = 0.0584889642;csp27[8] = -0.0470445898;csp27[9] = -0.0253383269;csp27[10] = 0.1185874041;csp27[11] = -0.0000000000;csp27[12] = 0.0000000000;csp27[13] = 0.0000000000;csp27[14] = 0.1185874041;csp27[15] = 0.0611721325;
csp28[0] = 0.0312500000;csp28[1] = 0.0234265845;csp28[2] = -0.1078923379;csp28[3] = -0.0565567779;csp28[4] = -0.0470445898;csp28[5] = -0.0584889642;csp28[6] = 0.0000000000;csp28[7] = 0.1412048505;csp28[8] = 0.0470445898;csp28[9] = 0.0611721325;csp28[10] = 0.1185874041;csp28[11] = -0.0000000000;csp28[12] = 0.0000000000;csp28[13] = 0.0000000000;csp28[14] = -0.1185874041;csp28[15] = -0.0253383269;
csp29[0] = 0.0312500000;csp29[1] = -0.0234265845;csp29[2] = -0.1078923379;csp29[3] = -0.0565567779;csp29[4] = 0.0470445898;csp29[5] = 0.0584889642;csp29[6] = -0.0000000000;csp29[7] = 0.1412048505;csp29[8] = 0.0470445898;csp29[9] = -0.0611721325;csp29[10] = -0.1185874041;csp29[11] = -0.0000000000;csp29[12] = 0.0000000000;csp29[13] = 0.0000000000;csp29[14] = -0.1185874041;csp29[15] = -0.0253383269;
csp30[0] = 0.0312500000;csp30[1] = -0.0565567779;csp30[2] = -0.1078923379;csp30[3] = -0.0234265845;csp30[4] = 0.0470445898;csp30[5] = 0.1412048505;csp30[6] = 0.0000000000;csp30[7] = 0.0584889642;csp30[8] = -0.0470445898;csp30[9] = 0.0253383269;csp30[10] = -0.1185874041;csp30[11] = -0.0000000000;csp30[12] = 0.0000000000;csp30[13] = 0.0000000000;csp30[14] = 0.1185874041;csp30[15] = 0.0611721325;
csp31[0] = 0.0312500000;csp31[1] = -0.0565567779;csp31[2] = -0.1078923379;csp31[3] = 0.0234265845;csp31[4] = -0.0470445898;csp31[5] = 0.1412048505;csp31[6] = -0.0000000000;csp31[7] = -0.0584889642;csp31[8] = -0.0470445898;csp31[9] = 0.0253383269;csp31[10] = 0.1185874041;csp31[11] = 0.0000000000;csp31[12] = 0.0000000000;csp31[13] = 0.0000000000;csp31[14] = 0.1185874041;csp31[15] = -0.0611721325;
csp32[0] = 0.0312500000;csp32[1] = -0.0234265845;csp32[2] = -0.1078923379;csp32[3] = 0.0565567779;csp32[4] = -0.0470445898;csp32[5] = 0.0584889642;csp32[6] = -0.0000000000;csp32[7] = -0.1412048505;csp32[8] = 0.0470445898;csp32[9] = -0.0611721325;csp32[10] = 0.1185874041;csp32[11] = 0.0000000000;csp32[12] = 0.0000000000;csp32[13] = 0.0000000000;csp32[14] = -0.1185874041;csp32[15] = 0.0253383269;

MaxRvGain2d = end_of_csps;
length_of_array = 4;
end_of_gain = MaxRvGain2d + length_of_array;
MaxRvGain2d[0] = 1.000;MaxRvGain2d[1] = 1.000;MaxRvGain2d[2] = 1.000;MaxRvGain2d[3] = 1.000;
MaxRvGain3d = end_of_gain;
length_of_array = 4;
end_of_gain = MaxRvGain3d + length_of_array;
MaxRvGain3d[0] = 1.000;MaxRvGain3d[1] = 1.000;MaxRvGain3d[2] = 1.000;MaxRvGain3d[3] = 1.000;
InPhase2d = end_of_gain;
length_of_array = 4;
end_of_gain = InPhaseGain2d + length_of_array;
InPhaseGain2d[0] = 1.0000;InPhaseGain2d[1] = 0.7500;InPhaseGain2d[2] = 0.3000;InPhaseGain2d[3] = 0.0500;
InPhaseGain3d = end_of_gain;
length_of_array = 4;
end_of_gain = InPhaseGain3d + length_of_array;
InPhaseGain3d[0] = 1.0000;InPhaseGain3d[1] = 0.6000;InPhaseGain3d[2] = 0.2000;InPhaseGain3d[3] = 0.0286;
MaxReGain2d = end_of_gain;
length_of_array = 4;
end_of_gain = MaxReGain2d + length_of_array;
MaxReGain2d[0] = 1.0000;MaxReGain2d[1] = 0.9239;MaxReGain2d[2] = 0.7071;MaxReGain2d[3] = 0.3827;
MaxReGain3d = end_of_gain;
length_of_array = 4;
end_of_gain = MaxReGain3d + length_of_array;
MaxReGain3d[0] = 1.0000;MaxReGain3d[1] = 0.8611;MaxReGain3d[2] = 0.6123;MaxReGain3d[3] = 0.3047;

BF = end_of_gain;
length_of_array = 16;
end_of_array = BF + length_of_array;
function SetDistCoef(dNFC,dspeak) local(w1,w2)
(
	NFCDist == 4.0? w1 = 0 :(
		w1 = 342.0/(dNFC*srate);
	);
	w2 = 342.0/(dspeak*srate);
	NF1.NF_Filt1Init(w1,w2,1.0);
	NF2.NF_Filt1Init(w1,w2,1.0);
	NF3.NF_Filt1Init(w1,w2,1.0);
	NF4.NF_Filt2Init(w1,w2,1.0);
	NF5.NF_Filt2Init(w1,w2,1.0);
	NF6.NF_Filt2Init(w1,w2,1.0);
	NF7.NF_Filt2Init(w1,w2,1.0);
	NF8.NF_Filt2Init(w1,w2,1.0);
	NF9.NF_Filt3Init(w1,w2,1.0);
	NF10.NF_Filt3Init(w1,w2,1.0);
	NF11.NF_Filt3Init(w1,w2,1.0);
	NF12.NF_Filt3Init(w1,w2,1.0);
	NF13.NF_Filt3Init(w1,w2,1.0);
	NF14.NF_Filt3Init(w1,w2,1.0);
	NF15.NF_Filt3Init(w1,w2,1.0);
);

SF0.shelfinit(srate,1200.0,1.0,1.0,1);
SF1.shelfinit(srate,1200.0,1.0,1.0,1);
SF2.shelfinit(srate,1200.0,1.0,1.0,1);
SF3.shelfinit(srate,1200.0,1.0,1.0,1);
SF4.shelfinit(srate,1200.0,1.0,1.0,1);
SF5.shelfinit(srate,1200.0,1.0,1.0,1);
SF6.shelfinit(srate,1200.0,1.0,1.0,1);
SF7.shelfinit(srate,1200.0,1.0,1.0,1);
SF8.shelfinit(srate,1200.0,1.0,1.0,1);
SF9.shelfinit(srate,1200.0,1.0,1.0,1);
SF10.shelfinit(srate,1200.0,1.0,1.0,1);
SF11.shelfinit(srate,1200.0,1.0,1.0,1);
SF12.shelfinit(srate,1200.0,1.0,1.0,1);
SF13.shelfinit(srate,1200.0,1.0,1.0,1);
SF14.shelfinit(srate,1200.0,1.0,1.0,1);
SF15.shelfinit(srate,1200.0,1.0,1.0,1);
NF1.NF_Filt1Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF2.NF_Filt1Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF3.NF_Filt1Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF4.NF_Filt2Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF5.NF_Filt2Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF6.NF_Filt2Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF7.NF_Filt2Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF8.NF_Filt2Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF9.NF_Filt3Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF10.NF_Filt3Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF11.NF_Filt3Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF12.NF_Filt3Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF13.NF_Filt3Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF14.NF_Filt3Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);
NF15.NF_Filt3Init(342.0/(NFCDist*srate),342.0/(SpDist*srate),1.0);

@slider
slider1==0 ? GainTypeLF = MaxRvGain3d;
slider1==1 ? GainTypeLF = InPhaseGain3d;
slider1==2 ? GainTypeLF = MaxReGain3d;
slider2==0 ? GainTypeHF = MaxRvGain3d;
slider2==1 ? GainTypeHF = InPhaseGain3d;
slider2==2 ? GainTypeHF = MaxReGain3d;

LFGainLin = 2 ^(LFGain/6);
HFGainLin = 2 ^(HFGain/6);

SF0.shelfinit(srate,slider3,GainTypeLF[0]*LFGainLin,GainTypeHF[0]*HFGainLin,0);
SF1.shelfinit(srate,slider3,GainTypeLF[1]*LFGainLin,GainTypeHF[1]*HFGainLin,0);
SF2.shelfinit(srate,slider3,GainTypeLF[1]*LFGainLin,GainTypeHF[1]*HFGainLin,0);
SF3.shelfinit(srate,slider3,GainTypeLF[1]*LFGainLin,GainTypeHF[1]*HFGainLin,0);
SF4.shelfinit(srate,slider3,GainTypeLF[2]*LFGainLin,GainTypeHF[2]*HFGainLin,0);
SF5.shelfinit(srate,slider3,GainTypeLF[2]*LFGainLin,GainTypeHF[2]*HFGainLin,0);
SF6.shelfinit(srate,slider3,GainTypeLF[2]*LFGainLin,GainTypeHF[2]*HFGainLin,0);
SF7.shelfinit(srate,slider3,GainTypeLF[2]*LFGainLin,GainTypeHF[2]*HFGainLin,0);
SF8.shelfinit(srate,slider3,GainTypeLF[2]*LFGainLin,GainTypeHF[2]*HFGainLin,0);
SF9.shelfinit(srate,slider3,GainTypeLF[3]*LFGainLin,GainTypeHF[3]*HFGainLin,0);
SF10.shelfinit(srate,slider3,GainTypeLF[3]*LFGainLin,GainTypeHF[3]*HFGainLin,0);
SF11.shelfinit(srate,slider3,GainTypeLF[3]*LFGainLin,GainTypeHF[3]*HFGainLin,0);
SF12.shelfinit(srate,slider3,GainTypeLF[3]*LFGainLin,GainTypeHF[3]*HFGainLin,0);
SF13.shelfinit(srate,slider3,GainTypeLF[3]*LFGainLin,GainTypeHF[3]*HFGainLin,0);
SF14.shelfinit(srate,slider3,GainTypeLF[3]*LFGainLin,GainTypeHF[3]*HFGainLin,0);
SF15.shelfinit(srate,slider3,GainTypeLF[3]*LFGainLin,GainTypeHF[3]*HFGainLin,0);
SetDistCoef(NFCDist,SpDist);

@sample
BF[0] = SF0.shelf(spl0);
BF[1] = SF1.shelf(spl1);
BF[2] = SF2.shelf(spl2);
BF[3] = SF3.shelf(spl3);
BF[4] = SF4.shelf(spl4);
BF[5] = SF5.shelf(spl5);
BF[6] = SF6.shelf(spl6);
BF[7] = SF7.shelf(spl7);
BF[8] = SF8.shelf(spl8);
BF[9] = SF9.shelf(spl9);
BF[10] = SF10.shelf(spl10);
BF[11] = SF11.shelf(spl11);
BF[12] = SF12.shelf(spl12);
BF[13] = SF13.shelf(spl13);
BF[14] = SF14.shelf(spl14);
BF[15] = SF15.shelf(spl15);

DistFiltEnable!=0? (
	DistFiltEnable==1?(
		BF[1]=NF1.NF_Filt1ProcessSpDist(BF[1]);
		BF[2]=NF2.NF_Filt1ProcessSpDist(BF[2]);
		BF[3]=NF3.NF_Filt1ProcessSpDist(BF[3]);
		BF[4]=NF4.NF_Filt2ProcessSpDist(BF[4]);
		BF[5]=NF5.NF_Filt2ProcessSpDist(BF[5]);
		BF[6]=NF6.NF_Filt2ProcessSpDist(BF[6]);
		BF[7]=NF7.NF_Filt2ProcessSpDist(BF[7]);
		BF[8]=NF8.NF_Filt2ProcessSpDist(BF[8]);
		BF[9]=NF9.NF_Filt3ProcessSpDist(BF[9]);
		BF[10]=NF10.NF_Filt3ProcessSpDist(BF[10]);
		BF[11]=NF11.NF_Filt3ProcessSpDist(BF[11]);
		BF[12]=NF12.NF_Filt3ProcessSpDist(BF[12]);
		BF[13]=NF13.NF_Filt3ProcessSpDist(BF[13]);
		BF[14]=NF14.NF_Filt3ProcessSpDist(BF[14]);
		BF[15]=NF15.NF_Filt3ProcessSpDist(BF[15]);
	) : (
		BF[1]=NF1.NF_Filt1Process(BF[1]);
		BF[2]=NF2.NF_Filt1Process(BF[2]);
		BF[3]=NF3.NF_Filt1Process(BF[3]);
		BF[4]=NF4.NF_Filt2Process(BF[4]);
		BF[5]=NF5.NF_Filt2Process(BF[5]);
		BF[6]=NF6.NF_Filt2Process(BF[6]);
		BF[7]=NF7.NF_Filt2Process(BF[7]);
		BF[8]=NF8.NF_Filt2Process(BF[8]);
		BF[9]=NF9.NF_Filt3Process(BF[9]);
		BF[10]=NF10.NF_Filt3Process(BF[10]);
		BF[11]=NF11.NF_Filt3Process(BF[11]);
		BF[12]=NF12.NF_Filt3Process(BF[12]);
		BF[13]=NF13.NF_Filt3Process(BF[13]);
		BF[14]=NF14.NF_Filt3Process(BF[14]);
		BF[15]=NF15.NF_Filt3Process(BF[15]);
	);
);

spl0=spl1=spl2=spl3=spl4=spl5=spl6=spl7=spl8=spl9=spl10=spl11=spl12=spl13=spl14=spl15=spl16=spl17=spl18=spl19=spl20=spl21=spl22=spl23=spl24=spl25=spl26=spl27=spl28=spl29=spl30=spl31=0.0;

cnt = 0;
loop(16,
spl0+=BF[cnt]*csp1[cnt];
spl1+=BF[cnt]*csp2[cnt];
spl2+=BF[cnt]*csp3[cnt];
spl3+=BF[cnt]*csp4[cnt];
spl4+=BF[cnt]*csp5[cnt];
spl5+=BF[cnt]*csp6[cnt];
spl6+=BF[cnt]*csp7[cnt];
spl7+=BF[cnt]*csp8[cnt];
spl8+=BF[cnt]*csp9[cnt];
spl9+=BF[cnt]*csp10[cnt];
spl10+=BF[cnt]*csp11[cnt];
spl11+=BF[cnt]*csp12[cnt];
spl12+=BF[cnt]*csp13[cnt];
spl13+=BF[cnt]*csp14[cnt];
spl14+=BF[cnt]*csp15[cnt];
spl15+=BF[cnt]*csp16[cnt];
spl16+=BF[cnt]*csp17[cnt];
spl17+=BF[cnt]*csp18[cnt];
spl18+=BF[cnt]*csp19[cnt];
spl19+=BF[cnt]*csp20[cnt];
spl20+=BF[cnt]*csp21[cnt];
spl21+=BF[cnt]*csp22[cnt];
spl22+=BF[cnt]*csp23[cnt];
spl23+=BF[cnt]*csp24[cnt];
spl24+=BF[cnt]*csp25[cnt];
spl25+=BF[cnt]*csp26[cnt];
spl26+=BF[cnt]*csp27[cnt];
spl27+=BF[cnt]*csp28[cnt];
spl28+=BF[cnt]*csp29[cnt];
spl29+=BF[cnt]*csp30[cnt];
spl30+=BF[cnt]*csp31[cnt];
spl31+=BF[cnt]*csp32[cnt];
cnt = cnt+1;
);

@gfx 724 310
gfx_r = 1.0;gfx_g =1.0;gfx_b = 1.0;
gfx_x = 3;
gfx_y = 3;
gfx_drawnumber(GainTypeLF[0]*LFGainLin,3);gfx_drawstr(" : ");
gfx_drawnumber(GainTypeLF[1]*LFGainLin,3);gfx_drawstr(" : ");
gfx_drawnumber(GainTypeLF[2]*LFGainLin,3);gfx_drawstr(" : ");
gfx_drawnumber(GainTypeLF[3]*LFGainLin,3);gfx_drawstr(" LF Per Order Gain Values");
gfx_x = 3;
gfx_y += gfx_texth+3;
gfx_drawnumber(GainTypeHF[0]*HFGainLin,3);gfx_drawstr(" : ");
gfx_drawnumber(GainTypeHF[1]*HFGainLin,3);gfx_drawstr(" : ");
gfx_drawnumber(GainTypeHF[2]*HFGainLin,3);gfx_drawstr(" : ");
gfx_drawnumber(GainTypeHF[3]*HFGainLin,3);gfx_drawstr(" HF Per Order Gain Values");
gfx_x = 3;
gfx_y += gfx_texth+3;
gfx_drawstr("Sp Dist Comp set to: ");
DistFiltEnable>=1?(gfx_drawnumber(SpDist+0.005,2);gfx_drawchar('m');) : gfx_drawstr("off");
gfx_x = 3;
gfx_y += gfx_texth+3;
gfx_drawstr("NFC set to: ");
DistFiltEnable==2?(gfx_drawnumber(NFCDist+0.005,2);gfx_drawchar('m');) : gfx_drawstr("off");

gfx_x = 0;
gfx_y+=gfx_texth+3;
gfx_blit(0, 1.0, 0.0);
gfx_x+=245;
gfx_blit(1,1.0,0.0);
gfx_x+=245;
gfx_blit(2,1.0,0.0);
gfx_x = 600;
gfx_y = 5;
gfx_blit(3, 1.0, 0.0);
